import { read, utils } from 'xlsx';

export class ExcelUtils {
  static async readExcelFromUrl(
    url: string,
  ): Promise<{ [language: string]: { [key: string]: string } }> {
    try {
      const response = await fetch(url);
      if (!response.ok) {
        throw new Error(`Failed to fetch ${url}: ${response.statusText}`);
      }

      const arrayBuffer = await response.arrayBuffer();
      const data = new Uint8Array(arrayBuffer);
      const workbook = read(data, { type: 'array' });

      // 获取第一个工作表
      const firstSheetName = workbook.SheetNames[0];
      const worksheet = workbook.Sheets[firstSheetName];

      // 转换为JSON格式（使用第一行作为表头）
      const jsonData = utils.sheet_to_json(worksheet, {
        header: 1, // 使用第一行作为表头
        raw: false,
        defval: null,
        blankrows: false,
      });

      // 确保至少有两行数据（表头和至少一行内容）
      if (jsonData.length < 2) {
        throw new Error('Excel文件至少需要包含表头和一行数据');
      }

      const headers = jsonData[0] as string[];
      const result: { [language: string]: { [key: string]: string } } = {};
      // 初始化语言对象（使用第一行作为语言标识）

      // 初始化语言对象
      headers.forEach(lang => {
        if (lang && lang.trim() !== '=') {
          // 排除可能的分隔符列
          result[lang] = {};
        }
      });

      // 处理每一行数据（从第二行开始）
      for (let i = 1; i < jsonData.length; i++) {
        const row = jsonData[i] as (string | null)[];

        // 获取键（第一列）
        const key = row[0];
        if (!key) continue; // 跳过空键行

        // 为每种语言添加翻译
        headers.forEach((lang, index) => {
          if (lang && lang.trim() !== '=' && index < row.length) {
            const value = row[index];
            if (value !== null) {
              result[lang][key] = value;
            }
          }
        });
      }
      return result;
    } catch (err: any) {
      throw new Error(`读取Excel失败: ${err.message}`);
    }
  }
}
